<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    function cardNumber(ary) {
      // 先把数组排序
      const resort = ary.sort((a, b) => a - b)
      // Number.MAX_SAFE_INTEGER 的意思是  JavaScript 中最大的安全整数
      let min = Number.MAX_SAFE_INTEGER
      const dist = []
      for (let i = 0; i < resort.length; i++) {
        // 临时存储变量的数组, 记录第一个元素
        let tem = []
        tem.push(resort[i])
        // 从第二个开始
        for (let j = i + 1; j < resort.length + 1;) {
          // 如果下一个数字，跟上一个数字相同，存储到临时分组中
          if (resort[j] === resort[i]) {
            tem.push(resort[j])
            // 让 j++ 走执行下一步骤
            j++
          } else {
            // 如果当前分组个数，小于临时数组个数
            if (min > tem.length) {
              min = tem.length
            }
            dist.push(tem)
            tem = null
            // 让 i 从 当前 j 的位置开始
            // 这里不能直接等于 j ，因为上面还要执行 i ++ 所以要 j - 1
            i = j - 1
            j++ // 这里好像并没有必要了, 因为下面已经 break 了
            break;
          }
        }
      }
      console.log(dist)
      const isSuccess = dist.every(i => i.length % min === 0)
      return isSuccess
    }
    const result2 = cardNumber([1, 1, 1, 2, 2, 2, 3, 3])
    console.log(result2) // true
  </script>
</body>

</html>